import router, { asyncRoutes } from './router'
import store from '@/store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import getPageTitle from './utils/get-page-title'

// 白名单
const whiteList = ['/login', '404']

router.beforeEach(async(to, from, next) => {
  const token = store.state.user.token
  // 如果有token，不能去登录页
  if (token) {
    // 先判断是否有用户信息，如果没有才去发请求，节约性能
    if (!store.getters.userId) {
      // 这里必须要加一个await，因为比是获取到用户的信息之后再跳到首页去,可以直接拿到过滤出来的权限
      const { data } = await store.dispatch('user/getUserInfoAction')
      // console.log(data.roles.menus)

      // 动态添加路由
      // 先过滤出来可以访问的路由
      // const menus = store.getters.roles.menus
      // console.log(menus)

      // const filterRoutes = asyncRoutes.filter((ele) => {
      //   return data.roles.menus.includes(ele.children[0].name)
      // })
      const filterRoutes = asyncRoutes.filter((ele) => {
        return data.roles.menus.includes(ele.children[0].name)
      })
      // 将筛选出来的路由动态添加到路由系统中
      router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
      // console.log(router)
      store.commit('menu/updateMenuList', filterRoutes)
      // 路由官方的 bug 解决方案: 重新定向到目标地点
      next({
        ...to,
        replace: true
      })
    }

    if (to.path === '/login') {
      NProgress.done()
      next('/')
    } else {
      next()
    }
  } else {
    // 除了白名单不能访问其他页面
    if (whiteList.includes(to.path)) {
      next()
    } else {
      NProgress.done()
      next('/login')
    }
  }
})

router.afterEach((to, from) => {
  // finish progress bar
  NProgress.done()
  // console.log(to.meta.title)
  document.title = getPageTitle(to.meta.title)
})
